home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / mus / edit / WaveTracer.lha / WaveTracer / Doc / Developer / Sources / Mac_PC_RAW8.Saver.p < prev    next >
Text File  |  1996-06-01  |  4KB  |  104 lines

  1. program SAVER;
  2.  
  3. { © by QXC & VWP! All Rights Reserved! Siehe "Programmierung.Guide" und
  4.   "Grammophon.eff.p" für weitere Copyright-Infos }
  5.  
  6. Uses ExecIO;
  7.  
  8. type Image=ptr;
  9. type Window=ptr;
  10. type Screen=ptr;
  11. type IntuiText=ptr;
  12.  
  13. {$incl "libraries/dos.h","exec/memory.h"};
  14. {$path "WaveTracer/","RAM:include/";incl "WTIncl.mod","ModIncl.mod"}
  15.  
  16. { WTIncl.mod  - Alle wichtigen Strukturen und Konstanten
  17.   ModIncl.mod - Alle für das Modulehandling erforderlichen Proceduren,
  18.                 Strukturen und variablendefinitionen }
  19.  
  20.  
  21. procedure SAVERAW;
  22.  
  23. var SMemA,SMemL,Addr1,Addr8,l,m :long;
  24. var Data8                       :^byte;
  25. var Data1                       :^long;
  26. var ChBit,ChID                  :byte;
  27.  
  28. begin
  29.    with MyWTstdMsg^ do begin
  30.       Flags:=0;
  31.       SMemL:=PlayL24 div 4;
  32.       SMemA:=AllocFastFirst(SMemL,MEMF_CLEAR);
  33.       if SMemA=0 then begin
  34.          SMemL:=AvailMem(MEMF_LARGEST);
  35.          if SMemL>PlayL24 div 4 then SMemL:=PlayL24 div 4;
  36.          SMemA:=AllocFastFirst(SMemL,MEMF_CLEAR);
  37.          if SMemA=0 then begin
  38.             Flags:=MDE_NO_MEMORY;        { Nicht genug Speicher vorhanden,
  39.                                            Fehlermeldung gibt der WaveTracer
  40.                                            aus }
  41.             exit;
  42.          end;
  43.       end;
  44.       ChBit:=1;
  45.       for ChID:=1 to 6 do begin
  46.          if not (ActiveChannels and ChBit=0) then begin
  47.             if MemA24[ChID]<>0 then begin
  48.                l:=0; Addr1:=MemA24[ChID];
  49.                repeat
  50.                   Addr8:=SMemA;
  51.                   repeat
  52.                      Data1:=ptr(Addr1); Addr1:=Addr1+4;
  53.                      Data8:=ptr(Addr8); Addr8:=Addr8+1;
  54.                      Data8^:=(Data1^ div 65536) + 127;
  55.                   until (Addr8>=SMemA+SMemL) or (Addr1>=MemA24[ChID]+PlayL24);
  56.                   m:=DosWrite(ActFHandle,ptr(SMemA),Addr8-SMemA);
  57.                   if m<Addr8-SMemA then begin
  58.                      FreeMem(SMemA,SMemL);
  59.                      Flags:=MDE_FILEERROR; { Datei-Fehler, Fehlermeldung wird
  60.                                              vom WaveTracer abgegeben }
  61.                      exit;
  62.                   end;
  63.                   l:=l+m;
  64.                until l>=PlayL24 div 4
  65.             end;
  66.          end;
  67.          ChBit:=ChBit*2;
  68.       end;
  69.       FreeMem(SMemA,SMemL);
  70.       Flags:=MDE_READY;                  { Alles OK }
  71.    end;
  72. end;
  73.  
  74.  
  75. begin
  76.    OpenLib(DosBase,'dos.library',0);
  77.    if CREATEPORTS(PORT_SAVER) then begin { eigenen Port anlegen }
  78.       with MyWTStdMsg^ do if Version=VERSION_SAVER then begin
  79.          if (ActFHandle<>0) and (Flags=MDC_DOIT) then begin
  80.             { einziges Kommando: Daten sollen gespeichert werden. Das FileHandle
  81.               der bereits geöffneten Datei Findet sich in MyWTStdMsg^.ActFHandle;
  82.               die Datei darf nicht mit DosClose() geschlossen werden! }
  83.             SAVERAW;
  84.             if Flags=MDE_READY then begin
  85.                                          { Copyright-Infos ausgeben, wenn
  86.                                            erfolgreich gespeichert wurde }
  87.                Flags:=0;
  88.                WTMsgPrc^:=MsgPrc(WTM_TASKREQ,'PC-/MacIntosh®-RAW 8 Bit Sample-Saver',COPYRIGHT,
  89.                                  '','OK','',0,0,0,0,0,NIL);
  90.                MESSAGEHANDLE;
  91.                Flags:=MDE_READY;
  92.             end;
  93.          end else Flags:=MDE_ERROR;      { unbekanntes Kommando vom
  94.                                            WaveTracer }
  95.       end else Flags:=MDE_WRONG_MODULEVERSION;
  96.                                          { unbekannte Modulversion }
  97.       MESSAGEHANDLE;
  98.       RemPort(MyPort);                   { Erfolgsflag (MDE_..) abgeben und
  99.                                            eigenen Port entfernen }
  100.    end;
  101.    CloseLib(DosBase);
  102. end.
  103.  
  104.